package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import negocio.PedidoDelivery;
import persistencia.AdministradorDeConexion;

public class DAOPedidoDelivery {
	
	private static DAOPedidoDelivery instancia;
	
	private DAOPedidoDelivery(){
			
	}
	
	public static DAOPedidoDelivery getInstancia() {
		if(instancia == null)
			return instancia = new DAOPedidoDelivery();
		return instancia;
	}
	
	//*******************************************************************************************************************//
	// ALTA
	//*******************************************************************************************************************//	
	
	public void ingresarPedido(PedidoDelivery pedido){
		Connection connection = AdministradorDeConexion.getInstancia().connect();
		try{
			String query =  "INSERT INTO [Raices].[dbo].[Pedido]"
			+ "([NroPedido],[NroComanda],[Telefono],[Direccion],[Fecha])VALUES  "
			+ "VALUES (?,?,?,?,?)";
			PreparedStatement preparedStatement = null;
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, pedido.getNroPedido()); 
			preparedStatement.setInt(2, pedido.getComanda().getNroComanda());
			preparedStatement.setInt(3, pedido.getTelefono());
			preparedStatement.setString(4, pedido.getDireccion());
			preparedStatement.setDate(5, pedido.getHora());
			preparedStatement.execute();		
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Info: DAOPedidoDelivery.ingresarPedido(): El Pedido " + pedido.getNroPedido() + " se ha cargado exitosamente en la Base de Datos.");
			
			// Recorro el vector de ItemsPedido de mi Pedido para persistirlo en la Base de Datos.
			
			//for (int i = 0; i < pedido.getItemsPedido().size(); i++){
				//DAOItemPedido.getInstancia().crearItemPedido(PedidoDelivery.getNroPedido(), pedido.getItemsPedido().elementAt(i));
			
			
		}
		catch (SQLException e) {
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOPedidoDelivery.ingresarPedido(): Error al intentar crear el Pedido " + pedido.getNroPedido() + " en la Base de Datos. " + e.getLocalizedMessage());
		}
		catch (Exception e) {
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOPedidoDelivery.ingresarPedido(): Error al intentar crear el Pedido " + pedido.getNroPedido() + " en la Base de Datos. " + e.getLocalizedMessage());
		}
	}
	
	//*******************************************************************************************************************//
	// BUSQUEDA - TIENE QUE SER GENERICA Y NO ESPECIFICA.
	//*******************************************************************************************************************//

	public PedidoDelivery buscarPedido(int nroPedido) {
		Connection connection = AdministradorDeConexion.getInstancia().connect();
		PedidoDelivery pedido = null;
		try{
			String query =  "SELECT * FROM Pedido WHERE numero = ?";
			PreparedStatement preparedStatement = null;
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, nroPedido);
			ResultSet result = preparedStatement.executeQuery();			
			while (result.next()){
				pedido = new PedidoDelivery(result.getInt("NroPedido"), result.getString("Direccion"), result.getInt("Telefono"), null, result.getDate("Fecha"));
				AdministradorDeConexion.getInstancia().closeConnection(connection);
				//POR CADA PEDIDO, BUSCAR LA COMANDA POR EL CODIGO DE COMANDA.
				//ARMAR LA COMANDA.
				//ADJUNTAR EL OBJETO CREADO AL PEDIDO.
				//SUMAR EL PEDIDO A MI COLECCION DE PEDIDOS.
			}
		return pedido;
		}
		catch (SQLException e) {
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOPedido.buscarPedido(): Error al buscar el Pedido " + nroPedido + " en la Base de Datos. " + e.getLocalizedMessage());
		}
		catch (Exception e) {
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOPedido.buscarPedido(): Error al buscar el Pedido " + nroPedido + " en la Base de Datos. " + e.getLocalizedMessage());
		}
		return null;
	}
	public int getNumeroDePedidoNuevo() {
		int numeroDePedidoNuevo = 0;
		Connection connection = AdministradorDeConexion.getInstancia().connect();
		try{
			String query = "SELECT MAX(numero) FROM Pedido";
			PreparedStatement preparedStatement = null;
			preparedStatement = connection.prepareStatement(query);
			ResultSet result = preparedStatement.executeQuery();
			while (result.next()){
				numeroDePedidoNuevo = result.getInt(1) + 1;
			}
		}
		catch (SQLException e) {
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOPedido.getNumeroDePedidoNuevo(): Error al buscar el ultimo numero de pedido en la Base de Datos. " + e.getLocalizedMessage());
		}
		catch (Exception e) {
			AdministradorDeConexion.getInstancia().closeConnection(connection);
			System.out.println("Error: DAOPedido.getNumeroDePedidoNuevo(): Error al buscar el ultimo numero de pedido en la Base de Datos. " + e.getLocalizedMessage());
			System.out.println("Ud. ha creado el primer pedido dentro del sistema, se ha asignado al mismo el numero 1.");
		}	
		return numeroDePedidoNuevo;
	}
	
	


}
